#!/bin/bash

#####################################################
#Inicializacion de michelle
#####################################################

#trap de 186
trap exit SIGUSR2

#trap de SIGUSR1
trap "leerConfigModulos ; reInicializarModulos ; reloadEjecutarModPeriodicos"  SIGUSR1

#trap de SIGPWR
trap "salir 1" SIGPWR

#PID
COREPID=$$

#SESS
SESIONID=`ps ax -o pid,sess | grep $COREPID | awk '{print $2}'`

ARCH_MODULOS_COMANDOS=/etc/michelle/modcomando
ARCH_MODULOS_PERIODICOS=/etc/michelle/modperiodico

#Chequeo de archivos

if [ ! -e $ARCH_MODULOS_COMANDOS ]; then
	/usr/bin/funciones_log.sh ERROR_READ_FILECONFIG
	echo "Saliendo"
	exit 1
fi
if [ ! -e $ARCH_MODULOS_PERIODICOS ]; then
	/usr/bin/funciones_log.sh ERROR_READ_FILECONFIG
	echo "Saliendo"
	exit 1
fi

# Usuario
ME=`whoami`

#Tiempo de refresco en archivos de configuracion
TIEMPO_CHECKMODULOS=5

#Tiempo de ejecucion de modulos periodicos
TIEMPO_MODULOSPERIODICOS=10

#####################################################
#Funciones de michelle
#####################################################

reloadEjecutarModPeriodicos() {

kill -SIGUSR2 $PIDEJECUTARPERIODICOS 
source ejecutarModulosPeriodicos.sh &
PIDEJECUTARPERIODICOS=$!

}

function reInicializarModulos() {
	inicializarModulos
	if [ $? -ne 0 ]; then
		/usr/bin/funciones_log.sh loguear ERROR_INITIALIZE
		salir 1
	fi
}
#####################################################

leerConfigModulos() {

MODULOS_PERIODICOS=`leerModulos $ARCH_MODULOS_PERIODICOS`
MODULOS_COMANDO=`leerModulos $ARCH_MODULOS_COMANDOS`
MODULOS=`leerModulos $ARCH_MODULOS_COMANDOS $ARCH_MODULOS_PERIODICOS`

}

#####################################################

leerModulos(){
cat $1 $2	| awk 'BEGIN {FS=":"} 
			{ i=1;
			while($i != "") {
			if($i ~ /^'$ME'$|,*'$ME',*/) {
				printf "%s ",$1;
			}
			i=i+1;
			}
			}'



}
#####################################################

inicializarModulos()
{
if [ "$MODULOS" != "" ]; then
	for i in $MODULOS; do
		echo "Inicializando $i"
		. $i Iniciar
		if [ $? -eq 0 ]; then
			echo "OK"
			
		else
			/usr/bin/funciones_log.sh ERROR_INITIALIZE
			echo "Error al cargar el modulo $i"
			echo "Saliendo"
			return 1
		fi
	done
else 
	echo "No hay modulos para inicializar"
	return 0
fi
}

#####################################################

#Recibe como parametro el codigo de salida
salir()
{
	kill -SIGUSR2 $PIDCHECKMODULOS
	kill -SIGUSR2 $PIDEJECUTARPERIODICOS	
	exit $1
}

#####################################################

procesarInstruccion () 
{
	case $1 in
		"Ayuda")
			echo
			echo "Comandos Built-in" "red"
			echo "Ayuda: Imprime esta ayuda"
			echo
			echo "Informacion: Imprime informacion de los modulos activos"
			echo 
			echo "ListarModulos: Imprime los modulos activos para este usuario"
			echo			
			echo "Salir: Sale de esta sesion"
			echo "Apagar: Apaga la computadora"
			break;;
		"Informacion")
			MODULOS=`leerModulos $ARCH_MODULOS_COMANDOS $ARCH_MODULOS_PERIODICOS`
			if [ "$MODULOS" != "" ]; then
				for i in $MODULOS; do
					echo ""
					. $i Informacion
					echo ""
				done
				return 0
			else
				echo "No hay modulos cargados"
				return 0
			fi
			break;;
		"ListarModulos")
			if [ "$MODULOS" != "" ]; then
				echo "$MODULOS"
				echo 
				return 0
			else
				echo "No hay modulos cargados"
				return 0
			fi
			break;;
		"Salir")
			echo "Saliendo"	
			salir 0
			break;;
		"Apagar")
			echo "Apagando"
			shutdown now
			break;;
		*)
			ERROR=0
			if [ "$MODULOS_COMANDO" != "" ]; then
				for i in $MODULOS_COMANDO; do
					. $i Procesar "$*"
					if [ $? -ne 0 ]; then 
						/usr/bin/funciones_log.sh ERROR_COMMAND_NOTPERMITED
						ERROR=1					
					fi
					
				done
				if [ $ERROR -eq 0 ]; then
				#	comando=$1
				#	while [ "$1" != "" ]; do
				#		comando=$comando$1&
				#		shift
				#	done 
				# $comando
				eval $*
				fi
				return 0
			else
				eval $*
				return 0
			fi
			break;;	
			
	esac
}
#####################################################
#Inicio de michelle
#####################################################

echo "Bienvenido a Michelle"

#Leo configuracion de modulos
leerConfigModulos

inicializarModulos
if [  $? -ne 0 ]; then
	exit 1
fi

source checkModulos.sh &
PIDCHECKMODULOS=$!	

source ejecutarModulosPeriodicos.sh &
PIDEJECUTARPERIODICOS=$!

while [ 1 ]; do 	
	echo  -n "`whoami`@michelle: "
	read INPUT
	procesarInstruccion $INPUT
	
done


